[python]爬虫:熟练掌握beautifulsoup

Beautifulsoup处理的对象种类: 首先用其解析文件: soup = BeautifulSoup(open(‘index.html’)) 1.tag: 例如<title>The Dormouse’s story</title>中的title就是tag 的对象 如果想要提取title里面的字符串: print soup.title 通过这种方式找到的是第一个符合要求的标记 也可以修改这个标签: soup.title.name = ‘mytitle’ 这样的话那一段字符便可以被修改成为<mytitle>The Dormouse’s story</mytitle> tag当然有他的属性,如<p class=”title”><b>abcdefg</b></p>,有一个class属性,它的值为title,类似于字典的标签 soup.p[‘class’] soup.p.get(‘class’) 的输出结果都是[‘title’] soup.p.attrs 输出的是 {‘class’:[‘title’]} 当然我们也可以对它进行修改: soup.p[‘class’] = ‘myclass’ 2.NavigableString 我们可以通过加.string的方式来获得标签内部的内容: soup.p.string 就打印出的是abcdefg,也可以通过unicode()函数将其转化为Unicode字符串 3.beautifulsoup: beautifulsoup就是整个代码本身,代指的就是这里的soup 4.comment comment是文档的注释部分 如 <a> <!–Elsie–> </a> 我们照样可以通过soup.a.string访问这里的Elsie,打印出来的结果和普通内容没有什么两样,需要通过type(soup.a.string)来判断是否是注释,如果是,打印出来的结果是bs4.element.Comment 遍历文档树 1.子节点 tag.content可以将tag子节点以列表的方式输出而tag.children是一个循环生成器,可以对子节点进行循环: for child in soup.head.children: print(child) 但是这只包含其下级,而不包含下级的下级的下级,需要用.descendants作递归循环,而当tag内容唯一时(只有一个tag)可以用.string直接读取里面的内容,而,strings则可以遍历所有tag里面的的字符串,需要用循环语句调用,而.stirpped_strings可以去掉字符串里面包含的空格 […]

[python 爬虫]通过回调函数爬取数据并且下载下来!

大家还记得我们以前的那段把所有index都下载下来的那段代码吗? import requests import re import time from urllib.parse import urljoin import lxml.html import cssselect import csv def download(url, user_agent=’wswp’, num_retries = 2):     print(’downloading:’, url)     time.sleep(0.5)     headers = {’User-Agent’: user_agent}     html = requests.get(url, headers = headers)     if html.status_code != requests.codes.ok:         e […]

[python 爬虫]数据抓取

现在我们已经成功地把网页下载下来了,可是光下载下来有什么用呢?我们需要把这个数据抓取下来而完成整个爬虫功能的实现。 分析网页 我们还是以http://example.webscraping.com作为实例,建议用Chrome浏览器,比如我们想要抓取某个国家的面积(area)那么我们只需选中那一行然后再右键Inspect Element

[python 爬虫]我的第一个爬虫(3)

链接爬虫 我们为了遍历网站上所有的内容,我们需要让爬虫表现的像普通用户,跟踪链接,访问感兴趣的内容,通过跟踪链接的方式,我们可以很容易地下载整个网站的页面,但是这种方法会下载我们不需要的网页,比如我们想要再接下来的网站里抓取索引页面,可是它也有可能抓取到了国家的页面内容,我们怎么办呢?我们以http://example.webscraping.com作为实例,我们发现,所有的索引内容的网址都是在/places/default/index的根目录下,需要通过正则表达式来确定哪些内容需要抓取: def link_crawler(seed_url, link_regex):#regex里面是正则表达式需要抓取的页面     crawl_queue = [seed_url]     while crawl_queue:         url = crawl_queue.pop()         html = download(url).text         for link in get_links(html):             #匹配该链接是不是我想要爬取得内容             if re.match(link_regex, link):       […]

[python 爬虫]我的第一个爬虫程序(2)

hello各位,好久不见,我们今天继续: 在上一章我们主要学习了如何重试下载,那么这一章我们来学习一下设置用户代理和其他一些的用法 设置用户代理 用户代理的主要目的是我们的python它使用的是默认用户代理python-requests/2.18.4,但是有些网站曾经经历过质量不佳的爬虫造成的服务器过载,所以会封禁默认的用户代理,接下来,运用前面的知识我们需要对这个函数进行一些更改,将用户代理更改为‘wswp’: import requests def download(url, user_agent=’wswp’, num_retries = 2):     print(’downloading:’, url)     headers = {’User-Agent’: user_agent}     html = requests.get(url, headers = headers)     if html.status_code != requests.codes.ok:         e = html.status_code         print(’Download error:’, e)         html […]