크롤러 전투 : Requests + BeautifulSoup은 Jingdong 속옷 정보를 크롤링하고 양식 (python)을 가져옵니다.

작업 준비

우리가 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('结束')

이 예에서는 제품 이름, 가격 및 상점 이름 만 선택했습니다. 더 많은 정보 액세스를 선택할 수 있습니다.
여기에 사진 설명 삽입

추천

출처blog.csdn.net/kobeyu652453/article/details/113455232