python基础爬虫(一)爬取网站数据并保存到Sql server数据库中
in SQLPython with 5 comments
Read:805

python基础爬虫(一)爬取网站数据并保存到Sql server数据库中

in SQLPython with 5 comments

python的作用,很多人都知道一点收集网站数据——爬虫

网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。

其实,许多人口中所说的爬虫(web crawler),跟另外一种功能“网页抓取”(web scraping)搞混了。

即便你用浏览器手动拷贝数据下来,也叫做网页抓取.但是人都比较懒,怎么可能自己动手复制,也就是说,用爬虫(或者机器人)自动替你完成网页抓取工作,才是你真正想要的。

数据抓下来干什么呢?

一般是先存储起来,放到数据库或者电子表格中,以备检索或者进一步分析使用。
所以,你真正想要的功能是这样的:
找到链接,获得Web页面,抓取指定信息,存储。
这个过程有可能会往复循环,甚至是滚雪球。
你希望用让python程序自动帮你完成。

Python语言的重要特色之一,就是可以利用强大的软件工具包(许多都是第三方提供)。你只需要编写简单的程序,就能自动解析网页,抓取数据。

目标

本来我又个python的任务是爬新闻网,我看了一下那些新闻网,太tm乱了,算了算了,换一个爬,所以我就去爬了小说网站。
你想要什么小说,自己百度。不要找收费的小说,要免费的。

比如我要爬《完美世界》
首先我要找到小说网站的主页面,记住网址,如下图:
QQ截图20190216203558.png

程序

读入网页加以解析抓取,需要用到的软件包是 requests_html 。我们此处并不需要这个软件包的全部功能,只读入其中的 HTMLSession 就可以。(你没有安装是不能引用的,怎么安装——python第三方库安装问题)

from requests_html import HTMLSession

然后,我们建立一个会话(session),即让Python作为一个客户端,和远端服务器交谈

session = HTMLSession()

前面说了,我们要爬完美世界小说,找到网址,保存到变量url

url = 'https://www.fengyunok.com/2909/'#完美世界小说

下面的语句,利用 session 的 get 功能,把这个链接对应的网页整个儿取回来。

r = session.get(url)

网页里面都有什么内容呢?
我们告诉Python,请把服务器传回来的内容当作HTML文件类型处理。我不想要看HTML里面那些标签,只看文字部分。

print(r.html.text)

QQ截图20190216204809.png

我想要每一章节的内容,我就要一个一个点击章节名字的链接进去,才能跳转到内容

r.html.links#获取当前界面的全部连接

虽然能获得全部链接,但是,一个网页有很多其他的链接,比如广告链接,菜单链接等,这些是我们用不到的链接,我们要爬取小说内容,我们只需要每一章的链接。
如果你会html,你应该知道,网页的布局一般都是一块一块的,有规律性的。
我们打开小说章节目录的f12,然后选中第一章的a标签,右键复制,复制选择器
QQ截图20190216205833.png
多复制几章的选择器,,然后比较
QQ截图20190216210208.png

你会发现,天啦,感觉差不多,有点细微的差别。每一章都指向td的第x个子标签,哇,原来他们全是

`body > div.readerListBody > div.readerListShow > table > tbody > tr:nth-child(2) > td > a`

标签下的啊。
然后我们返回python编辑器,定义一个变量sel来储存它

sel = '.ccss>a'#完美世界的章节链接的选择器

到这里你就会疑问了,为什么上面的这么长,你这里定义的sel这么短,首先请你去了解css选择器。上面弄那一段长的通过浏览器获得的,我爬不到,然后自己根据css排版的直觉取了一个短的选择器,正好能指中每一章的链接。

我们让 Python 从返回内容中,查找 sel 对应的位置,把结果存到 results 变量中。

results = r.html.find(sel)

现在results里面有什么
我们打印一下results,会得到:
QQ截图20190216211756.png
是所有章节的链接的集合

print (results[0].absolute_links)
#索引代表第几章,`.text`是返回这一个a标签的文本,`.absolute_links`是返回绝对路径
print (results[1].text)
print (results[2].text)

QQ截图20190216212521.png
路径是返回的集合,我们不想要集合,只想要其中的链接字符串。所以我们先把它转换成列表,然后从中提取第一项,即网址链接。

list(results[0].absolute_links)[0]

小结

通过处理第一个链接,我们可以获得每一章内容的链接和标题内容,可是,如果每找一个链接,都需要手动输入上面这若干条语句,那也太麻烦了。所以就编写了一个函数

#获取字典,键是标题,值是内容链接
def get_text_link_from_sel(sel):
    mylist = []
    try:
        results = r.html.find(sel)
        for result in results:
            mytext = result.text
            mylink = list(result.absolute_links)[0]
            mylist.append((mytext, mylink))
        return mylist
    except:
        return None

解释一下上面的函数:mylist是一个字典集合,把所有的文章标题储存位keys,目标链接储存为values。for result in results遍历results里面的全部内容

获取到了数据,我们就应该放到数据库里面,这里用sql server2012.
python想要链接sql server数据库,需要引入第三方软件包pymssql,同样需要自己安装

import pymssql

导入了pymssql,然后就是链接数据库,方法很多,我又不是全部都会,我只举出我会的。

server = "."#服务器,这里是本地
user = "sa"#账号
password = "123456"#密码
conn = pymssql.connect(server, user, password, "news")#链接数据库,最后一个为数据库
cursor = conn.cursor()#创建一个游标对象,python里的sql语句都要通过cursor来执行

数据库连接完成,现在我们要理一下思路,我峨嵋你需要哪些数据,小说章节名字,内容,原文链接,现在还差每一章的内容
我们有一个字典集合里面保存了每一章的原文链接
现在我们遍历这个字典的value,进入每一章原文,通过上面的方法,获得原文内容

#循环获取完美每一章的内容
for i in range(0,2000,1):#i返回每一个键值对的索引,2000我瞎几把写的,自己根据情况斟酌
    url2=get_text_link_from_sel(sel)[i][8]#每一章原文的链接
    title = get_text_link_from_sel(sel)[i][0]#每一章的题目
    r2 = session.get(url2)#得到新连接的界面内容
    sel2='#content'#原文的选择器
    results2 = r2.html.find(sel2)#通过选择器准确获得目标文本
    content=results2[0].text

     #插入数据库
    cursor.execute("insert into tb_news  values ('{0}','{1}',getdate(),'{2}')".format(title,content,url2))
    conn.commit()  # 你必须调用 commit() 来保持你数据的提交
    num = cursor.rownumber  # 显示插入了几条数据
    if num > 0:  # 判断有没有插入成功的
        print("{0}:爬取成功".format(title))

然后运行,python就开始爬数据了,爬得有点慢
QQ截图20190216215314.png
QQ截图20190216215349.png

如果对你有帮助,打钱

赞赏



Responses
  1. Агрегатор Я. такси Самара даёт возможность вам вызвать машинув нужное место и в любое время дня и ночи. Произвести заказ машины можно через спец приложения на телефоне, заказав машину у оператора(позвонив ему) или на сайте Я.такси Самара. Вам надлежит назвать собственный телефонный номер, местоположение, время когда нужна автомобиль.

    Можно заказать такси вместе с детским авто креслом для перевозки детей, вечером после встреч лучше всего прибегнуть к такси, чем, например, садиться в авто нетрезвым, в аэропорт или на вокзал спокойнее пользоваться Yandex такси ненужно искать где оставить своё транспортное средство. Плата выполняется наличным или безналичным переводом. Время подъезда Я. такси составляет от 3 до 5 мин. примерно.

    Преимущества работы в Я. такси: Моментальная регистрация в приложение, Небольшая комиссия, Оплата мгновенная, Постоянный поток заказов, Оператор круглые сутки на связи.

    Для работы в Я. такси владельцу автомобиля нужно зарегистрироваться лично и транспорт, это займет пять мин. Наша комиссия будет составлять не больше 20 процентов. Возможно получать заработную плату в любое время. У вас постоянно обязательно будут заказы. В случае вопросов сможете связаться с круглосуточно действующей службой поддержки. Яндекс такси помогает людям быстро добраться до места назначения. Заказывая наше Yandex такси вы приобретаете люксовый сервис в городе.

    работа яндекс такси на личном - работа в компании такси

    Reply
  2. EVROSIS Technologies’s turnkey solutions: we customize our products and services to meet the exact requirements of our clients. At EVROSIS TECHNOLOGIES, our developers, engineers, and data scientists are experts in Financial Engineering, High Frequency Trading, Trading Platform & financial markets.

    Our competitive strengths: High Speed Networks Development, High Performance Computing, Deep Learning A.I., High Sharpe Ratio Trading models, and talented Quant Traders.

    You can Get custom Trading Solutions for any Exchanges/ECNs in The World or use pre-prepared Solutions and Profit from a state-of-the-Art Model. You will save Time and Money by Working with Us.

    Contact us and we will implement your needs.

    Kind regards

    Website : http://bit.ly/2ZG7jjP
    Skype: support.evrosis
    E-mail : info@evrosis.com
    EVROSIS Technologies Ltd.
    130 Old Street, London, United Kingdom, EC1V 9BD

    Reply
  3. Sorry for making you review this message which is probably to be considered by you as spam. Yes, spamming is a poor thing.

    On the other hand, the best means to find out something brand-new, heretofore unidentified, is to take your mind off your daily inconveniences and also reveal rate of interest in a subject that you might have considered as spam prior to. Right? antler ring

    We are a team of young people who have determined to start our very own service as well as make some money like several other people in the world.

    What do we do? We provide our site visitors a broad selection of fantastic handcrafted rings. All the rings are made by the finest craftsmen from throughout the United States.

    Have you ever seen or worn a green opal ring, wood ring, fire opal ring, Damascus ring, silver opal ring, Turquoise ring, blue opal ring, pink ring, meteorite ring, black ring or silver ring? This is just a little part of what you can always find in our store.

    Made in the USA, our handmade rings are not simply stunning and also initial presents for, claim, a wedding or birthday celebration, however additionally your talisman, a point that will absolutely bring you best of luck in life.

    As settlement for your time invested in reviewing this message, we offer you a 5% price cut on any kind of item you are interested in.

    We are anticipating meeting you in our shop!

    Reply
  4. 就这么简单就抓下来了?

    Reply
    1. @趣知识

      嗯...我只用来保存文本和链接,图片和视频音频不是这样抓取的

      Reply