php正则函数抓取网页连接( 用requests库+正则表达式构建一个简陋的爬虫(图))
优采云 发布时间: 2021-12-01 17:12php正则函数抓取网页连接(
用requests库+正则表达式构建一个简陋的爬虫(图))
我们使用请求库+正则表达式来构建一个简单的爬虫。虽然这个爬虫很简单,但是通过这个例子我们可以很好的了解这个爬虫。
这次的目的是爬取猫眼电影的TOP 100。要爬取这个信息,首先要到猫眼电影TOP 100的页面去观察(也可以说是踩点)。网址是:
这就是我们要爬取的页面,现在我们来写一段代码来自动访问这个页面。
def get_one_pages(url) ->'HTML': headers = {#构造headers模仿普通浏览器防止被屏蔽'User-Agent':'Mozilla/5.0 (Windows NT 6. 1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.@ >36'} response = requests.get(url, headers=headers)if response.status_code == 200: # 网页访问正常 return response.textreturn None
我们构造了 get_one_pages(url) 函数。在构造这个函数的时候,一定要注意header。header的作用是让爬虫伪装成一个普通的浏览器请求。如果不加header,服务器会拒绝你访问(不信试试看)。稍后,当您调用此函数并传入 URL 时,该函数将返回此网页的 HTML。HTML被视为网页的源代码。您可以通过在 Chrome 浏览器中按 F12 键来查看源代码。如果您发现返回的HTML与网页中的HTML相同,则证明我们的网页访问成功。
下一步就是解析这个页面,得到我们想要的内容。观察返回的HTML,你会发现每部电影的相关信息都被一个标签包围。
以这个标签为例,我们需要获取的内容是排名、电影海报、片名、演员、上映时间。这时候就轮到正则表达式出来了。我们使用正则表达式来匹配此文本以获取您想要的信息。如果你不知道正则表达式是什么,你可以谷歌一下。正则表达式的内容很复杂,但是我们这里使用的很简单,一个搜索就行。
下面是解析网页的代码:
def parse_one_page(html) -> 列表:模式 = 堆('.*?>(.*?).*?
(.*?)
', re.S) res = re.findall(pattern, html)for i in res:yield {# 这里用一个*敏*感*词*来构造字典'index': i[0],'image': i[1] , 'name': i[2].strip(),'actor': i[3].strip(),'time': i[4].strip(),}
我们使用 .*?>(.*?).*?
(.*?)
这个正则表达式用来匹配想要的内容,然后将匹配的结果存入字典,方便日后阅读和保存。
下一步,我们保存爬取的内容,否则一旦关闭程序,所有爬取的内容都会消失。忙着吃饭会不会不舒服。
def write_to_file(content):with open('result.txt','a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) +'n')
我们使用上下文管理器打开一个txt文件,将爬取到的内容写入这个文件。
我们的目标是爬进猫眼电影的TOP 100,但是我们现在才爬到TOP 10,后者呢?再看网页,我们看到11-20的网址是:
21-30 的 URL 是:,依此类推。. .
那么我们可以推断出网页的变化只与offset=后面的数字有关,这样我们就可以继续写代码了。
def main(offset): url ='#39; + str(offset) html = get_one_pages(url) content = parse_one_page(html)for i in content:print(i) write_to_file(i)
这里写了一个main(offset)函数,传入对应的数字,在对应的网页上执行我们之前的操作。
最后一步是传入号码。最后总结一下代码:
导入请求 import reimport json def get_one_pages(url) ->'HTML': headers = {# 构建标题模仿普通浏览器防止被屏蔽'User-Agent':'Mozilla/5.0 (Windows NT < @6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari / 537.36'} response = requests.get(url, headers=headers)if response.status_code == 200: # 网页访问正常 return response.textreturn Nonedef parse_one_page(html) -> list: pattern = pie ('.*?>(.*?).*?
(.*?)
', re.S) res = re.findall(pattern, html)for i in res:yield {# 这里用一个*敏*感*词*来构造字典'index': i[0],'image': i[1] , 'name': i[2].strip(),'actor': i[3].strip(),'time': i[4].strip(),}def write_to_file(content):with open( 'result.txt','a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) +'n')def main(offset): url ='# 39 ; + str(offset) html = get_one_pages(url) content = parse_one_page(html)for i in content:print(i) write_to_file(i)for i in range(10): main(i*10)) @>
这样,TOP 100 猫眼电影就可以爬下来保存为txt文件了。让我们来看看结果:
很好,我们期待的结果。
通过这样一个简单的爬虫程序,我们已经对爬虫有了一个大概的了解。如果你想爬取更多有用的内容,这还不够。希望你能在爬行路上越走越远。
以上内容素材来自崔庆才的《Python 3 Web爬虫开发实战》。