작업 준비
우리가 Jingdong 속옷 제품의 모든 정보를 로컬에 저장하고 싶다면 손으로 복사하여 붙여 넣는 매우 거대한 프로젝트가 될 것입니다. 이때 파이썬 크롤러로 실현할 수 있습니다.
1 단계 : 웹 주소 분석
시작 페이지 주소
시작 페이지 주소
https://search.jd.com/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page=1&s=56&click=1
(여기에 브라우저의 URL 표시 줄에 보이는 것은 분명히 중국어이지만 URL을 복사하여 메모장이나 코드에 붙여 넣으면 다음과 같이 될 것입니다.)
많은 웹 사이트의 URL에서, 일부 get Parameters 또는 키워드가 인코딩되어 있으므로 복사 할 때 문제가 발생합니다. 그러나 복사 된 URL은 직접 열 수 있습니다. 이 예에서는 이에 대해 걱정하지 마십시오.
그런 다음 첫 번째 페이지가 아닌 다른 페이지를 자동으로 크롤링하고 세 번째 페이지를 열고 웹 페이지 주소는 다음과 같이 분석 결과 첫 페이지와의 차이점은 첫 번째 페이지 마지막 & page = 1, 세 번째 페이지입니다. 페이지 & page = 3
우리는 여러 웹 페이지를 자동으로 얻는 방법을 for 루프에서 구현할 수 있다고 생각할 수 있습니다.
세 번째 페이지 URL이 그림에 표시됩니다.
https://search.jd.com/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page=3&s=56&click=1
1 단계 : 코드 구문 분석
먼저 제품을 선택하고
Li 라벨은 제품입니다.
그런 다음 특정 정보를 선택하십시오.
웹 페이지의 소스 코드를 천천히 공부합시다.
2 단계 : 코드
from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import RequestException
import pandas as pd
#读取网页
def craw(url,page):
try:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
html1 = requests.request("GET", url, headers=headers,timeout=10)
html1.encoding ='utf-8' # 加编码,重要!转换为字符串编码,read()得到的是byte格式的
html=html1.text
return html
except RequestException:#其他问题
print('读取error')
return None
#解析网页并保存数据到表格
def pase_page(url,page):
html=craw(url,page)
html=str(html)
if html is not None:
soup = BeautifulSoup(html, 'lxml')
"---先选择商品--"
shangping=soup.select('#J_goodsList ul li')
for li in shangping:
"---名称---"
name=li.select('.p-name.p-name-type-2 em')
name=[i.get_text() for i in name]
"---价格---"
price = li.select('.p-price i')
price = [i.get_text() for i in price]
"---店铺---"
shop=li.select('.p-shop a')
shop= [i.get_text() for i in shop]
if(len(name)!= 0)and (len(price)!= 0) and ( len(shop) != 0):
#print('名称:{0} ,价格{1},店铺名:{2}'.format(name, price, shop))
information=[name,price,shop]
information=np.array(information)
information = information.reshape(-1,3)
information=pd.DataFrame(information,columns=['名称','价格','店铺'])
if page == 1:
information.to_csv('京东文胸数据1.csv', mode='a+', index=False) # mode='a+'追加写入
else:
information.to_csv('京东文胸数据1.csv', mode='a+', index=False, header=False) # mode='a+'追加写入
else:
print('解析error')
for i in range(1,10):#遍历网页1-10
url="https://search.jd.com/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page="+str(i)+"&s=56&click=1"
pase_page(url,i)
print('第{0}页读取成功'.format(i))
print('结束')
이 예에서는 제품 이름, 가격 및 상점 이름 만 선택했습니다. 더 많은 정보 액세스를 선택할 수 있습니다.