scrapy爬取整个网页时如何避免链接失效
最近在使用scrapy爬取网页时遇到很多图片不能正常显示、a标签链接失效的情况,多是因为爬下来的网页和图片路径已经失去了原有的结构,网页无法根据标签的src或者标签的href找到对应的资源,下面就这个问题展开一个小研究。
首先,做这个工作是一定要修改网页的,所以我们引入BeautifulSoup库对网页进行解析。
其次,在本文中所有的网页以域名为目录名进行保存。
soup = bs(response.body, 'html.parser')
for item in soup.find_all('a'):
pass
下面我们分情况讨论。
大体上看,网页中的链接有以下几种格式:
/page/1.html
#content
./page/1.html
page/1.html
page/1
第一种情况,链接直接以/开头,很明显是从网站的根目录开始检索,那么我们直接将该网站的存储路径加在page前即可(home_path代表当前网页在我们系统中保存的路径,包含域名):
if item.get('href').startswith('/'):
item['href'] = home_path + '/' + item.get('href')[1:]
第二种情况,链接直接以http开头,结尾可能有'/'也可能没有,此时我们直接将其索引至域名目录下的index.html或index.jsp&#