想要写一个爬虫抓取Archdaily网站的搜索结果。在body > div:nth-child(20) > div > div.search-header > div:nth-child(1) > h3。 无论怎么尝试,在html输出正常的情况下解析函数返回为空。
from importlib.resources import read_binary
from urllib import request
import re
import time
import random
import csv
from ua_info import ua_list
# 定义一个爬虫类
class MaoyanSpider(object):
# 初始化
# 定义初始页面url
def __init__(self):
self.url = 'https://www.archdaily.com/search/projects/year/{}'
# 请求函数
def get_html(self,url):
headers = {'User-Agent':random.choice(ua_list)}
req = request.Request(url=url,headers=headers)
res = request.urlopen(req)
html = res.read().decode()
# 直接调用解析函数
self.parse_html(html)
# 解析函数
def parse_html(self,html):
# 正则表达式
re_bds = '<h3 class="search-header__title">(.*?)</h3>'
pattern = re.compile(re_bds)
r_list = pattern.findall(html)
self.save_html(r_list)
# 保存数据函数,使用python内置csv模块
def save_html(self,r_list):
#生成文件对象
with open('arch.csv','a',newline='',encoding="utf-8") as f:
#生成csv操作对象
writer = csv.writer(f)
#整理数据
for r in r_list:
name = r[0].strip()
L = [name,]
# 写入csv文件
writer.writerow(L)
print(name,)
# 主函数
def run(self):
#抓取第一页数据
for offset in range(2017,2019,1):
url = self.url.format(offset)
self.get_html(url)
#生成1-2之间的浮点数
time.sleep(random.uniform(1,2))
# 以脚本方式启动
if __name__ == '__main__':
#捕捉异常错误
try:
spider = MaoyanSpider()
spider.run()
except Exception as e:
print("错误:",e)
[] //返回空值
Print(html)正常,print(r_list)空,输出csv文件空白
每页返回一个结果 如46,178 Results